iT邦幫忙

2025 iThome 鐵人賽

DAY 22
0
Software Development

從零開始學 Python系列 第 22

Day 22 – 物件導向 OOP 基礎:Class 與 Object

  • 分享至 

  • xImage
  •  

今天的學習重點

  • 物件導向(OOP, Object-Oriented Programming)
  • 什麼是「類別」(Class)與「物件」(Object)
  • 如何在 Python 中建立 class 與建立實例
  • 屬性(attribute)與方法(method)的使用

一、什麼是 OOP(物件導向程式設計)

傳統的程式(程序導向,procedural programming)大多是以函式為主:
先定義一堆函式(function),然後依順序呼叫。
當專案變大,資料(data) 跟功能(function)分散各地,容易失控。

物件導向(OOP, Object-Oriented Programming)的核心想法是把資料和操作它的功能「綁在一起」,組合成一個物件(Object)。讓程式更有結構,物件之間互相獨立,維護性高。

二、類別 (Class) 與 物件 (Object)

類別 (Class) 就像「藍圖」、「模板」、「設計稿」。
定義了「這類東西會有什麼屬性(attributes, 資料)」和「能做什麼事(methods, 方法)」。但類別本身不是實際存在的東西。

物件 (Object) 是根據類別所建立的「實體」。
就像「用設計藍圖蓋出來的房子」。每個物件都有自己的資料,但都遵循同一個類別的規則。

example:學生系統
定義類別(模板)

class Student:
    def __init__(self, name, age):  # 初始化方法,定義屬性
        self.name = name
        self.age = age
    
    def introduce(self):            # 方法(功能)
        return f"Hello, my name is {self.name}, I am {self.age} years old."

建立物件(實體)

s1 = Student("Chloe", 20)
s2 = Student("Evelyn", 22)

print(s1.introduce())   # Hello, my name is Chloe, I am 20 years old.
print(s2.introduce())   # Hello, my name is Evelyn, I am 22 years old.

螢幕擷取畫面 2025-08-24 134945

Class 的結構與關鍵元素

在 Python 中,類別通常由三個主要部分組成:

  1. 建構子(Constructor, init
  • 在建立物件時會自動執行,用來初始化物件的屬性
  1. 屬性(Attributes)
  • 儲存物件的資料,例如 name、age
  1. 方法(Methods)
  • 定義物件可以執行的動作,例如 introduce() 或 greet()
class Person:
    def __init__(self, name, age):   # 建構子
        self.name = name             # 屬性
        self.age = age

    def greet(self):                 # 方法
        return f"Hello, I am {self.name}, {self.age} years old."

說明

  • init → 特殊方法,建立物件時會自動呼叫
  • self → 代表物件本身(呼叫方法時會自動傳入)
  • self.name / self.age → 每個物件自己獨立擁有的屬性
  • greet() → 方法,讓物件執行某個行為

物件的屬性與方法

在 Python 中,屬性 (attribute) 與方法 (method) 是類別的重要組成:

  • 屬性 (attribute):存放物件的資料(像是狗的名字、品種)
  • 方法 (method):物件能做的事(像是「叫」這個動作)
class Dog:
    def __init__(self, name, breed):
        self.name = name
        self.breed = breed
    
    def bark(self):
        print(f"{self.name} says: Woof!")

dog1 = Dog("Mimi", "Samoyed")
dog2 = Dog("Autumn", "Schnauzer")

print(dog1.name)   # Mimi
dog2.bark()        # Autumn says: Woof!

補充說明

  1. 屬性 (Attributes)
  • dog1.name → 直接讀取物件的「名字」屬性,結果是 "Mimi"。
  • 每個物件都有自己獨立的屬性(同樣是 Dog 類別,但名字、品種不同)。
  1. 方法 (Methods)
  • dog2.bark() → 呼叫 bark() 方法,會根據物件的資料(name)印出不同的結果。
  • 雖然方法名稱相同,但不同物件呼叫時,會輸出屬於該物件的內容。
  1. 差異比較
  • 屬性 = 物件擁有的「靜態資料」
  • 方法 = 物件能做的「動態行為」
  1. 類比
    如果把「狗」當成類別(Class):
  • 屬性 = 名字、品種、年齡(這些資料存在物件身上)。
  • 方法 = 會叫、會跑、會搖尾巴(這些行為屬於物件能做的事)。

學習心得

今天第一次接觸到 Python 的 OOP,開始理解「程式不只是程式碼,還是一種建模方式」。透過 class 與 object,能把「資料」和「功能」打包在一起,讓程式更貼近現實世界的思維。
以前寫 Java,因為有 class、public、private、建構子等繁瑣的語法,常常被卡住。今天決定再拿出來看一次!
在 Java,建立一個物件通常要寫更多結構:

public class Person {
    String name;
    int age;

    // 建構子
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 方法
    public void greet() {
        System.out.println("Hello, my name is " + name + ", and I am " + age + " years old.");
    }
}

public class Main {
    public static void main(String[] args) {
        Person p1 = new Person("Chloe", 20);
        p1.greet();
    }
}

Python 的 OOP 語法少了型別宣告與 public/private 關鍵字。
明天我要進一步學習物件導向進階:繼承(Inheritance)與多型(Polymorphism)。
這能讓我們建立「父類別」與「子類別」的關係,實現程式碼的重複利用與彈性,感覺會更貼近現實世界的物件層級結構!


上一篇
Day 21 – 內建函式 map / filter / reduce 與匿名函式 lambda
下一篇
Day 23 – 物件導向進階:繼承與多型
系列文
從零開始學 Python30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言